package co.edu.usbcali.unidades.presentation.backingBeans;

import co.edu.usbcali.unidades.exceptions.*;
import co.edu.usbcali.unidades.modelo.*;
import co.edu.usbcali.unidades.modelo.dto.PersonaDTO;
import co.edu.usbcali.unidades.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.unidades.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlSelectOneMenu;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.math.BigDecimal;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Set;
import java.util.TimeZone;
import java.util.Vector;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;
import javax.faces.model.SelectItem;

import sun.misc.Cleaner;

/**
 * 
 * 
 * @author Zathura Code Generator http://code.google.com/p/zathura
 * 
 */
public class PersonaView extends DataSource implements Renderable,
		DisposableBean {
	private HtmlInputText txtPerPrimerNom;
	private HtmlInputText txtPerSegundoNom;
	private HtmlInputText txtPerPrimerApelli;
	private HtmlInputText txtPerSegundoApelli;
	private HtmlInputText txtPerCelular;
	private HtmlInputText txtPerCorreo;
	private HtmlInputText txtPerTelefono;
	private HtmlInputText txtEstCodigo_Estado;
	private HtmlSelectOneMenu cmbTipoDoc;
	private List<SelectItem> list_Docs = new ArrayList<SelectItem>();
	private HtmlSelectOneMenu cmbLOc;
	private List<SelectItem> list_loc = new ArrayList<SelectItem>();
	private HtmlSelectOneMenu cmbNumInm;
	private List<SelectItem> list_numInm = new ArrayList<SelectItem>();
	private HtmlInputText txtPerCedula;
	private HtmlCommandButton btnSave;
	private HtmlCommandButton btnModify;
	private HtmlCommandButton btnDelete;
	private HtmlCommandButton btnActivar;
	private HtmlCommandButton btnClear;
	private boolean renderDataTable;
	private boolean flag = true;
	private RenderManager renderManager;
	private PersistentFacesState state = PersistentFacesState.getInstance();
	private List<Persona> persona;
	private List<PersonaDTO> personaDTO;

	private String tpNombre;

	private boolean popupVisible = false;
	private String pass;
	private String user;
	
	public PersonaView() {
		super("");
	}

	public String action_clear() {
		txtPerCelular.setValue(null);
		txtPerCelular.setDisabled(true);
		txtPerCorreo.setValue(null);
		txtPerCorreo.setDisabled(true);
		txtPerPrimerApelli.setValue(null);
		txtPerPrimerApelli.setDisabled(true);
		txtPerPrimerNom.setValue(null);
		txtPerPrimerNom.setDisabled(true);
		txtPerSegundoApelli.setValue(null);
		txtPerSegundoApelli.setDisabled(true);
		txtPerSegundoNom.setValue(null);
		txtPerSegundoNom.setDisabled(true);
		txtPerTelefono.setValue(null);
		txtPerTelefono.setDisabled(true);
		txtPerCedula.setValue(null);
		txtPerCedula.setDisabled(false);
		cmbTipoDoc.setValue(-1);
		cmbTipoDoc.setDisabled(false);
		btnSave.setDisabled(true);
		btnDelete.setDisabled(true);
		btnModify.setDisabled(true);
		btnClear.setDisabled(false);

		return "";
	}

	public void listener_txtId(ValueChangeEvent event) {
		if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
			Persona entity = null;

			try {

				String perCedula = txtPerCedula.getValue().toString();
				if (cmbTipoDoc.getValue().toString().equals("-1")) {
					throw new Exception("Seleccione un tipo de Documento");
				}
				if (!Utilities.isNumeric(perCedula)) {
					throw new Exception("El No. de Documento debe ser numerico");
				}

				entity = BusinessDelegatorView.getPersona2(perCedula,cmbTipoDoc.getValue().toString());

				if (entity == null) {
					txtPerCelular.setDisabled(false);
					txtPerCorreo.setDisabled(false);
					txtPerPrimerApelli.setDisabled(false);
					txtPerPrimerNom.setDisabled(false);
					txtPerSegundoApelli.setDisabled(false);
					txtPerSegundoNom.setDisabled(false);
					txtPerTelefono.setDisabled(false);
					txtPerCedula.setDisabled(false);
					btnSave.setDisabled(false);
					btnDelete.setDisabled(true);
					btnModify.setDisabled(true);
					btnClear.setDisabled(false);
				} else if(entity.getEstado().getEstCodigo().equals("1")){
					txtPerCelular.setValue(entity.getPerCelular());
					txtPerCelular.setDisabled(false);
					txtPerCorreo.setValue(entity.getPerCorreo());
					txtPerCorreo.setDisabled(false);
					txtPerPrimerApelli.setValue(entity.getPerPrimerApelli());
					txtPerPrimerApelli.setDisabled(false);
					txtPerPrimerNom.setValue(entity.getPerPrimerNom());
					txtPerPrimerNom.setDisabled(false);
					txtPerSegundoApelli.setValue(entity.getPerSegundoApelli());
					txtPerSegundoApelli.setDisabled(false);
					txtPerSegundoNom.setValue(entity.getPerSegundoNom());
					txtPerSegundoNom.setDisabled(false);
					txtPerTelefono.setValue(entity.getPerTelefono());
					txtPerTelefono.setDisabled(false);
					cmbTipoDoc.setValue(entity.getTipoDocumento()
							.getTipCodigoDoc());
					cmbTipoDoc.setDisabled(true);
					txtPerCedula.setValue(entity.getPerCedula());
					txtPerCedula.setDisabled(true);
					btnSave.setDisabled(false);
					btnDelete.setDisabled(false);
					btnModify.setDisabled(false);
					btnClear.setDisabled(false);
					
				}else if(entity.getEstado().getEstCodigo().equals("2")){
					txtPerCelular.setValue(entity.getPerCelular());
					txtPerCelular.setDisabled(true);
					txtPerCorreo.setValue(entity.getPerCorreo());
					txtPerCorreo.setDisabled(true);
					txtPerPrimerApelli.setValue(entity.getPerPrimerApelli());
					txtPerPrimerApelli.setDisabled(true);
					txtPerPrimerNom.setValue(entity.getPerPrimerNom());
					txtPerPrimerNom.setDisabled(true);
					txtPerSegundoApelli.setValue(entity.getPerSegundoApelli());
					txtPerSegundoApelli.setDisabled(true);
					txtPerSegundoNom.setValue(entity.getPerSegundoNom());
					txtPerSegundoNom.setDisabled(true);
					txtPerTelefono.setValue(entity.getPerTelefono());
					txtPerTelefono.setDisabled(true);
					cmbTipoDoc.setValue(entity.getTipoDocumento()
							.getTipCodigoDoc());
					cmbTipoDoc.setDisabled(true);
					txtPerCedula.setValue(entity.getPerCedula());
					txtPerCedula.setDisabled(true);
					btnSave.setDisabled(true);
					btnDelete.setVisible(false);
					btnActivar.setVisible(true);
					btnModify.setVisible(false);
					btnClear.setDisabled(false);
				}
			} catch (Exception e) {
				action_clear();
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}
	}

	public String action_saveAdmin() {
		try {
			String tipoPersona = FacesUtils.getSession()
					.getAttribute("tipoPer").toString();
			if (tipoPersona.equals("5")) {
				BusinessDelegatorView.savePersona(
						txtPerCedula.getValue().toString().trim().toUpperCase(),
						txtPerCelular.getValue().toString().trim(), 
						txtPerCorreo.getValue().toString().trim(), 
						txtPerPrimerApelli.getValue().toString().trim().toUpperCase(),
						txtPerPrimerNom.getValue().toString().trim().toUpperCase(),
						txtPerSegundoApelli.getValue().toString().trim().toUpperCase(), 
						txtPerSegundoNom.getValue().toString().trim().toUpperCase(),
						txtPerTelefono.getValue().toString().trim(), 
						"1",
						cmbTipoDoc.getValue().toString(), 
						tipoPersona);
				//BusinessDelegatorView.saveAdministrador(null, "1", txtPerCedula.getValue().toString());
				popupVisible = true;
				FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
				action_clear();
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_savePropietario() {

		try {
			String tipoPersona = FacesUtils.getSession()
					.getAttribute("tipoPer").toString();
			if (tipoPersona.equals("1")) {
				BusinessDelegatorView.savePersonaPropietario(
							txtPerCedula.getValue().toString().trim().toUpperCase(), 
							txtPerCelular.getValue().toString().trim(), 
							txtPerCorreo.getValue().toString().trim(), 
							txtPerPrimerApelli.getValue().toString().trim().toUpperCase(),
							txtPerPrimerNom.getValue().toString().trim().toUpperCase(),
							txtPerSegundoApelli.getValue().toString().trim().toUpperCase(), 
							txtPerSegundoNom.getValue().toString().trim().toUpperCase(),
							txtPerTelefono.getValue().toString().trim(), 
							"1",
							cmbTipoDoc.getValue().toString(), 
							tipoPersona,
							cmbLOc.getValue().toString(),
							cmbNumInm.getValue().toString());
				}
			popupVisible = true;			
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			cmbLOc.setValue("-1");
			cmbNumInm.setValue("-1");
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";

	}
	
	
	public String action_saveFamiliar() {

		try {
			String tipoPersona = FacesUtils.getSession()
					.getAttribute("tipoPer").toString();
			if (tipoPersona.equals("6")) {
				BusinessDelegatorView.savePersona(
						txtPerCedula.getValue().toString().trim().toUpperCase(),
						txtPerCelular.getValue().toString().trim(), 
						txtPerCorreo.getValue().toString().trim(), 
						txtPerPrimerApelli.getValue().toString().trim().toUpperCase(),
						txtPerPrimerNom.getValue().toString().trim().toUpperCase(),
						txtPerSegundoApelli.getValue().toString().trim().toUpperCase(), 
						txtPerSegundoNom.getValue().toString().trim().toUpperCase(),
						txtPerTelefono.getValue().toString().trim(), 
						"1",
						cmbTipoDoc.getValue().toString(), 
						tipoPersona);
						BusinessDelegatorView.saveGrupoFamiliar(null, "1", txtPerCedula.getValue().toString(), FacesUtils.getSession().getAttribute("codPro").toString());
						FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
						action_clear();
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_delete() {
		try {
			BusinessDelegatorView.deletePersona(FacesUtils
					.checkString(txtPerCedula), cmbTipoDoc.getValue()
					.toString());
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYDELETED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

	public String action_modifyAdmin() {
		try {
			String tipoPersona = FacesUtils.getSession()
			.getAttribute("tipoPer").toString();
			BusinessDelegatorView.updatePersonaAdmin(txtPerCedula.getValue().toString().trim().toUpperCase(),
					txtPerCelular.getValue().toString().trim(), 
					txtPerCorreo.getValue().toString().trim(), 
					txtPerPrimerApelli.getValue().toString().trim().toUpperCase(),
					txtPerPrimerNom.getValue().toString().trim().toUpperCase(),
					txtPerSegundoApelli.getValue().toString().trim().toUpperCase(), 
					txtPerSegundoNom.getValue().toString().trim().toUpperCase(),
					txtPerTelefono.getValue().toString().trim(), 
					"1",
					cmbTipoDoc.getValue().toString(), 
					tipoPersona);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}
	
	/*public void action_activarPersona(){
		try {
			Persona	per = BusinessDelegatorView.getPersona(txtPerCedula.getValue().toString());
			Estado e = BusinessDelegatorView.getEstado("2");
			per.setEstado(e);
			if(per.getTipoPersona().getTipCodigoP().equals("1")){
			BusinessDelegatorView.updatePersonaPropietario(per.getPerCedula(), per.getPerCelular(),per.getPerCorreo(),per.getPerPrimerApelli(), per.getPerPrimerNom(), per.getPerSegundoApelli(), per.getPerSegundoNom(), per.getPerTelefono(), per.getEstado().getEstCodigo(), per.getTipoDocumento().getTipCodigoDoc(),per.getTipoPersona().getTipCodigoP(), codLocalizacion, codInmueble);
		
		
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}*/
	
	public String action_modifyPropietario() {
		try {
			String tipoPersona = FacesUtils.getSession()
			.getAttribute("tipoPer").toString();
			BusinessDelegatorView.updatePersonaPropietario(txtPerCedula.getValue().toString().trim().toUpperCase(),
					txtPerCelular.getValue().toString().trim(), 
					txtPerCorreo.getValue().toString().trim(), 
					txtPerPrimerApelli.getValue().toString().trim().toUpperCase(),
					txtPerPrimerNom.getValue().toString().trim().toUpperCase(),
					txtPerSegundoApelli.getValue().toString().trim().toUpperCase(), 
					txtPerSegundoNom.getValue().toString().trim().toUpperCase(),
					txtPerTelefono.getValue().toString().trim(), 
					"1",
					cmbTipoDoc.getValue().toString(), 
					tipoPersona,
					cmbLOc.getValue().toString(),
					cmbNumInm.getValue().toString());
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}
	
	

	/*public String action_modifyWitDTO(String perCedula, String perCelular,
			String perCorreo, String perPrimerApelli, String perPrimerNom,
			String perSegundoApelli, String perSegundoNom, String perTelefono,
			String estCodigo_Estado, String tipCodigoDoc_TipoDocumento,
			String tipCodigoP_TipoPersona) throws Exception {
		try {
			BusinessDelegatorView.updatePersona(perCedula, perCelular,
					perCorreo, perPrimerApelli, perPrimerNom, perSegundoApelli,
					perSegundoNom, perTelefono, estCodigo_Estado,
					tipCodigoDoc_TipoDocumento, tipCodigoP_TipoPersona);
			renderManager.getOnDemandRenderer("PersonaView").requestRender();
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
		} catch (Exception e) {
			// renderManager.getOnDemandRenderer("PersonaView").requestRender();
			FacesUtils.addErrorMessage(e.getMessage());
			throw e;
		}

		return "";
	}*/

	public List<Persona> getPersona() {
		if (flag) {
			try {
				persona = BusinessDelegatorView.getPersona();
				flag = false;
			} catch (Exception e) {
				flag = true;
				FacesUtils.addErrorMessage(e.getMessage());
			}
		}

		return persona;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setPersona(List<Persona> persona) {
		this.persona = persona;
	}

	public boolean isRenderDataTable() {
		try {
			if (flag) {
				if (BusinessDelegatorView.findTotalNumberPersona() > 0) {
					renderDataTable = true;
				} else {
					renderDataTable = false;
				}
			}

			flag = false;
		} catch (Exception e) {
			renderDataTable = false;
			e.printStackTrace();
		}

		return renderDataTable;
	}

	public DataModel getData() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModel(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<Persona> getDataPage(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberPersona = 0;

		try {
			totalNumberPersona = BusinessDelegatorView.findTotalNumberPersona()
					.intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberPersona) {
			endIndex = totalNumberPersona;
		}

		try {
			persona = BusinessDelegatorView.findPagePersona(sortColumnName,
					sortAscending, startRow, endIndex - startRow);

			// Remove this Renderable from the existing render groups.
			// leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		// joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<Persona>(totalNumberPersona, startRow, persona);
	}

	public DataModel getDataDTO() {
		state = PersistentFacesState.getInstance();

		if (onePageDataModel == null) {
			onePageDataModel = new LocalDataModelDTO(pageSize);
		}

		return onePageDataModel;
	}

	/**
	 * This is where the Object data is retrieved from the database and returned
	 * as a list of objects for display in the UI.
	 */
	private DataPage<PersonaDTO> getDataPageDTO(int startRow, int pageSize) {
		// Retrieve the total number of objects from the database. This
		// number is required by the DataPage object so the paginator will know
		// the relative location of the page data.
		int totalNumberPersona = 0;

		try {
			totalNumberPersona = BusinessDelegatorView.findTotalNumberPersona()
					.intValue();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Calculate indices to be displayed in the ui.
		int endIndex = startRow + pageSize;

		if (endIndex > totalNumberPersona) {
			endIndex = totalNumberPersona;
		}

		try {
			persona = BusinessDelegatorView.findPagePersona(sortColumnName,
					sortAscending, startRow, endIndex - startRow);

			if (Utilities.validationsList(persona)) {
				personaDTO = new ArrayList<PersonaDTO>();

				for (Persona personaTmp : persona) {
					PersonaDTO personaDTO2 = new PersonaDTO();
					personaDTO2.setPerCedula(personaTmp.getPerCedula()
							.toString());
					personaDTO2
							.setPerCelular((personaTmp.getPerCelular() != null) ? personaTmp
									.getPerCelular().toString()
									: null);
					personaDTO2
							.setPerCorreo((personaTmp.getPerCorreo() != null) ? personaTmp
									.getPerCorreo().toString()
									: null);
					personaDTO2.setPerPrimerApelli((personaTmp
							.getPerPrimerApelli() != null) ? personaTmp
							.getPerPrimerApelli().toString() : null);
					personaDTO2
							.setPerPrimerNom((personaTmp.getPerPrimerNom() != null) ? personaTmp
									.getPerPrimerNom().toString()
									: null);
					personaDTO2.setPerSegundoApelli((personaTmp
							.getPerSegundoApelli() != null) ? personaTmp
							.getPerSegundoApelli().toString() : null);
					personaDTO2
							.setPerSegundoNom((personaTmp.getPerSegundoNom() != null) ? personaTmp
									.getPerSegundoNom().toString()
									: null);
					personaDTO2
							.setPerTelefono((personaTmp.getPerTelefono() != null) ? personaTmp
									.getPerTelefono().toString()
									: null);
					personaDTO2.setEstCodigo_Estado((personaTmp.getEstado()
							.getEstCodigo() != null) ? personaTmp.getEstado()
							.getEstCodigo().toString() : null);
					personaDTO2
							.setTipCodigoDoc_TipoDocumento((personaTmp
									.getTipoDocumento().getTipCodigoDoc() != null) ? personaTmp
									.getTipoDocumento().getTipCodigoDoc()
									.toString()
									: null);
					personaDTO2
							.setTipCodigoP_TipoPersona((personaTmp
									.getTipoPersona().getTipCodigoP() != null) ? personaTmp
									.getTipoPersona().getTipCodigoP()
									.toString()
									: null);
					personaDTO2.setPersona(personaTmp);
					personaDTO2.setPersonaView(this);
					personaDTO.add(personaDTO2);
				}
			}

			// Remove this Renderable from the existing render groups.
			leaveRenderGroups();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		// Add this Renderable to the new render groups.
		joinRenderGroups();
		// Reset the dirtyData flag.
		onePageDataModel.setDirtyData(false);
		// This is required when using Hibernate. If the SessionManager is not
		// cleared or closed objects are cached and stale objects will show up
		// in the table.
		// This way, the detached objects are reread from the database.
		// This call is not required with Hibernate, which uses a Query Hint
		// to clear the l2 cache in the DAO.
		flag = true;

		return new DataPage<PersonaDTO>(totalNumberPersona, startRow,
				personaDTO);
	}

	protected boolean isDefaultAscending(String sortColumn) {
		return true;
	}

	/**
	 * This method is called when a render call is made from the server. Render
	 * calls are only made to views containing an updated record. The data is
	 * marked as dirty to trigger a fetch of the updated record from the
	 * database before rendering takes place.
	 */
	public PersistentFacesState getState() {
		onePageDataModel.setDirtyData();

		return state;
	}

	/**
	 * This method is called from faces-config.xml with each new session.
	 */
	public void setRenderManager(RenderManager renderManager) {
		this.renderManager = renderManager;
	}

	public void renderingException(RenderingException arg0) {
		if (arg0 instanceof TransientRenderingException) {
		} else if (arg0 instanceof FatalRenderingException) {
			// Remove from existing Customer render groups.
			leaveRenderGroups();
		}
	}

	/**
	 * Remove this Renderable from existing uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void leaveRenderGroups() {
		if (Utilities.validationsList(personaDTO)) {
			for (PersonaDTO personaTmp : personaDTO) {
				renderManager.getOnDemandRenderer("PersonaView").remove(this);
			}
		}
	}

	/**
	 * Add this Renderable to the new uiCustomerBeans render groups.
	 * OnDemandRenderers are named/created using the underlying Customer Number.
	 */
	private void joinRenderGroups() {
		if (Utilities.validationsList(personaDTO)) {
			for (PersonaDTO personaTmp : personaDTO) {
				renderManager.getOnDemandRenderer("PersonaView").add(this);
			}
		}
	}

	public void dispose() throws Exception {
	}

	public RenderManager getRenderManager() {
		return renderManager;
	}

	public void setState(PersistentFacesState state) {
		this.state = state;
	}

	public HtmlInputText getTxtPerCelular() {
		return txtPerCelular;
	}

	public void setTxtPerCelular(HtmlInputText txtPerCelular) {
		this.txtPerCelular = txtPerCelular;
	}

	public HtmlInputText getTxtPerCorreo() {
		return txtPerCorreo;
	}

	public void setTxtPerCorreo(HtmlInputText txtPerCorreo) {
		this.txtPerCorreo = txtPerCorreo;
	}

	public HtmlInputText getTxtPerPrimerApelli() {
		return txtPerPrimerApelli;
	}

	public void setTxtPerPrimerApelli(HtmlInputText txtPerPrimerApelli) {
		this.txtPerPrimerApelli = txtPerPrimerApelli;
	}

	public HtmlInputText getTxtPerPrimerNom() {
		return txtPerPrimerNom;
	}

	public void setTxtPerPrimerNom(HtmlInputText txtPerPrimerNom) {
		this.txtPerPrimerNom = txtPerPrimerNom;
	}

	public HtmlInputText getTxtPerSegundoApelli() {
		return txtPerSegundoApelli;
	}

	public void setTxtPerSegundoApelli(HtmlInputText txtPerSegundoApelli) {
		this.txtPerSegundoApelli = txtPerSegundoApelli;
	}

	public HtmlInputText getTxtPerSegundoNom() {
		return txtPerSegundoNom;
	}

	public void setTxtPerSegundoNom(HtmlInputText txtPerSegundoNom) {
		this.txtPerSegundoNom = txtPerSegundoNom;
	}

	public HtmlInputText getTxtPerTelefono() {
		return txtPerTelefono;
	}

	public void setTxtPerTelefono(HtmlInputText txtPerTelefono) {
		this.txtPerTelefono = txtPerTelefono;
	}

	public HtmlInputText getTxtEstCodigo_Estado() {
		return txtEstCodigo_Estado;
	}

	public void setTxtEstCodigo_Estado(HtmlInputText txtEstCodigo_Estado) {
		this.txtEstCodigo_Estado = txtEstCodigo_Estado;
	}

	public HtmlSelectOneMenu getCmbTipoDoc() {
		list_Docs.clear();
		List<TipoDocumento> tDocs;
		try {
			tDocs = BusinessDelegatorView.getTipoDocumento();
			SelectItem item = new SelectItem(-1, "--Seleccione Un Tipo Doc.--");
			list_Docs.add(item);
			for (int i = 0; i < tDocs.size(); i++) {
				item = new SelectItem(tDocs.get(i).getTipCodigoDoc(), tDocs
						.get(i).getTipNombreDoc());
				list_Docs.add(item);
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());			
		}

		return cmbTipoDoc;
	}

	public void setCmbTipoDoc(HtmlSelectOneMenu cmbTipoDoc) {
		this.cmbTipoDoc = cmbTipoDoc;
	}

	public List<SelectItem> getList_Docs() {
		return list_Docs;
	}

	public void setList_Docs(List<SelectItem> listDocs) {
		list_Docs = listDocs;
	}

	public HtmlSelectOneMenu getCmbLOc() {
		list_loc.clear();
		List<Division> loc;
		try {
			loc = BusinessDelegatorView.getDivisionUnidad((FacesUtils.getSession().getAttribute("unidadNit")).toString());
			SelectItem item = new SelectItem(-1, "--Seleccione Localizacion--");
			list_loc.add(item);
			if (loc==null){
				throw new Exception("No existen divisiones o se encuentran inactivas");
			}
			for (int i = 0; i < loc.size(); i++) {
				item = new SelectItem(loc.get(i).getDivCodigo(), loc.get(i)
						.getDivNombre());
				list_loc.add(item);
			}
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getLocalizedMessage());
			e.printStackTrace();
		}
		return cmbLOc;
	}

	public void setCmbLOc(HtmlSelectOneMenu cmbLOc) {
		this.cmbLOc = cmbLOc;
	}

	public List<SelectItem> getList_loc() {
		return list_loc;
	}

	public void setList_loc(List<SelectItem> listLoc) {
		list_loc = listLoc;
	}

	public HtmlSelectOneMenu getCmbNumInm() {
		list_numInm.clear();
		try {
			SelectItem item = new SelectItem(-1, "--Seleccione Inmueble--");
			list_numInm.add(item);			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return cmbNumInm;
	}

	public void setCmbNumInm(HtmlSelectOneMenu cmbNumInm) {
		this.cmbNumInm = cmbNumInm;
	}

	public List<SelectItem> getList_numInm() {
		return list_numInm;
	}

	public void setList_numInm(List<SelectItem> listNumInm) {
		list_numInm = listNumInm;
	}

	/*
	 * public HtmlInputText getTxtTipCodigoP_TipoPersona() {
	 * 
	 * return txtTipCodigoP_TipoPersona; }
	 * 
	 * public void setTxtTipCodigoP_TipoPersona( HtmlInputText
	 * txtTipCodigoP_TipoPersona) { this.txtTipCodigoP_TipoPersona =
	 * txtTipCodigoP_TipoPersona; }
	 */

	public HtmlInputText getTxtPerCedula() {
		return txtPerCedula;
	}

	public void setTxtPerCedula(HtmlInputText txtPerCedula) {
		this.txtPerCedula = txtPerCedula;
	}

	public HtmlCommandButton getBtnSave() {
		return btnSave;
	}

	public void setBtnSave(HtmlCommandButton btnSave) {
		this.btnSave = btnSave;
	}

	public HtmlCommandButton getBtnModify() {
		return btnModify;
	}

	public void setBtnModify(HtmlCommandButton btnModify) {
		this.btnModify = btnModify;
	}

	public HtmlCommandButton getBtnDelete() {
		return btnDelete;
	}

	public void setBtnDelete(HtmlCommandButton btnDelete) {
		this.btnDelete = btnDelete;
	}

	public HtmlCommandButton getBtnClear() {
		return btnClear;
	}

	public void setBtnClear(HtmlCommandButton btnClear) {
		this.btnClear = btnClear;
	}

	public void setRenderDataTable(boolean renderDataTable) {
		this.renderDataTable = renderDataTable;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}

	public List<PersonaDTO> getPersonaDTO() {
		return personaDTO;
	}

	public void setPersonaDTO(List<PersonaDTO> personaDTO) {
		this.personaDTO = personaDTO;
	}

	public TimeZone getTimeZone() {
		return java.util.TimeZone.getDefault();
	}

	public String getTpNombre() {
		nomTipoPer();
		return tpNombre;
	}

	public void setTpNombre(String tpNombre) {
		this.tpNombre = tpNombre;
	}

	public boolean isPopupVisible() {
		return popupVisible;
	}

	public void setPopupVisible(boolean popupVisible) {
		this.popupVisible = popupVisible;
	}

	public String getPass() {
		return pass;
	}

	public void setPass(String pass) {
		this.pass = pass;
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}
	
	public HtmlCommandButton getBtnActivar() {
		return btnActivar;
	}

	public void setBtnActivar(HtmlCommandButton btnActivar) {
		this.btnActivar = btnActivar;
	}

	

	/**
	 * A special type of JSF DataModel to allow a datatable and datapaginator to
	 * page through a large set of data without having to hold the entire set of
	 * data in memory at once. Any time a managed bean wants to avoid holding an
	 * entire dataset, the managed bean declares this inner class which extends
	 * PagedListDataModel and implements the fetchData method. fetchData is
	 * called as needed when the table requires data that isn't available in the
	 * current data page held by this object. This requires the managed bean
	 * (and in general the business method that the managed bean uses) to
	 * provide the data wrapped in a DataPage object that provides info on the
	 * full size of the dataset.
	 */
	private class LocalDataModel extends PagedListDataModel {
		public LocalDataModel(int pageSize) {
			super(pageSize);
		}

		public DataPage<Persona> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPage(startRow, pageSize);
		}
	}

	private class LocalDataModelDTO extends PagedListDataModel {
		public LocalDataModelDTO(int pageSize) {
			super(pageSize);
		}

		public DataPage<PersonaDTO> fetchPage(int startRow, int pageSize) {
			// call enclosing managed bean method to fetch the data
			return getDataPageDTO(startRow, pageSize);
		}
	}
	
	public String action_crearAdminLocal() throws Exception{
		FacesUtils.getSession().setAttribute("tipoPer", "5");
		return "goCrearAdmin";
	}

	public String action_crearPropietario() throws Exception {
		FacesUtils.getSession().setAttribute("tipoPer", "1");
		return "goPropietario";
	}

	public String action_crearArrendatario() throws Exception {

		FacesUtils.getSession().setAttribute("tipoPer", "3");
		return "goArrendatario";

	}
	
	public String action_crearFamiliar() throws Exception {

		FacesUtils.getSession().setAttribute("tipoPer", "6");
		return "goFamiliar";

	}
	

	public void nomTipoPer() {
		try {
			String tipoPersonaCod = FacesUtils.getSession().getAttribute(
					"tipoPer").toString();
			TipoPersona tp = BusinessDelegatorView
					.getTipoPersona(tipoPersonaCod);
			tpNombre = tp.getTipNombreP();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
	public void llenarCmbInmueble(ValueChangeEvent e){
		try {
			if (!cmbLOc.getValue().toString().equals("-1")){
				List<Inmueble>inm=new ArrayList<Inmueble>();			
				inm = BusinessDelegatorView.getInmueblesDiv(cmbLOc.getValue().toString());
				for (int i = 0; i < inm.size(); i++) {
					SelectItem item = new SelectItem(inm.get(i).getInmNumeroId(), inm.get(i)
							.getInmNumeroId());
					list_numInm.add(item);
				}
			} 
		}catch (Exception e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
	}

	public void action_mostrar(ActionEvent e) {
		popupVisible = !popupVisible;
	}

}
